/*
ont-space - The ontology-based resource metadata repository
Copyright (c) 2006-2008, Information Eng. Research Unit - Univ. of Alcalá
http://www.cc.uah.es/ie
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option)
any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License along
with this library; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
package org.ontspace.dc;

import com.hp.hpl.jena.ontology.Ontology;
import java.net.URI;
import java.util.List;
import org.ontspace.QueryManager;
import org.ontspace.dc.owl.DCQueryResultImpl;

/**
 * 
 * Interface for a Dublin core Query Manager
 * 
 */
public interface DCQueryManager extends QueryManager {

    /**
     * Add the ontology asociated with the specified query manager
     * @param ont The ontology to add
     */
    public void addOntologyRef(Ontology ont);

    /**
     * Gets a list with the URIs of the ontologies required by the query manager
     * @return A list whith the URIs of the required ontologies
     */
    public List<URI> getRequiredOntologies();

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param contributor the contributor to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByContributor(String contributor);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param format the format to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByFormat(String format);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param rights the rights to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByRights(String rights);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param coverage the coverage to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByCoverage(String coverage);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param identifier the identifier to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByIdentifier(String identifier);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param source the source to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCBySource(String source);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param creator the creator to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByCreator(String creator);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param language the language to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByLanguage(String language);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param subject the subject to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCBySubject(String subject);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param date the date to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByDate(String date);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param publisher the publisher to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByPublisher(String publisher);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param title the title to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByTitle(String title);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param description the description to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByDescription(String description);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param relation the relation to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByRelation(String relation);

    /**
     *  Launches a query for  a particular element in the ontology    
     * @param type the type to search
     * @return DCQueryResultImpl object that have the Set of 
     * MetadataRecordReference
     */
    DCQueryResultImpl queryDCByType(String type);
}
